#include "s3c2440_soc.h"

/*
 * 115200 8n1
 */
int uart0_init()
{

    /* 设置引脚用于串口 */
    /* 查看原理图,txd0,rxd0分别接在gph2,gph3上 */
    GPHCON &= ~((3<<4) | (3<<6));
    GPHCON |= ((2<<4) | (2<<6));

    GPHUP &= ~((1<<2) | (1<<3)); //将内部引脚电压上拉


    /*
     * 设置波特率 
     * UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1 
     * UART clock = 50M
     * UBRDIVn = 50000000/(115200 x 16) -1 ~~ 26
     */
    UCON0 = 0x00000005;//设置PCLK,终端/查询模式
    UBRDIV0 = 26;

    /* 设置数据格式 */
    ULCON0 = 0x00000003; //8个数据位,无校验位,一位停止位


    return 0;
}

int putchar(int c)
{   
    /*
     * UTRSTAT0
     * UTXH0
     */

    while(!(UTRSTAT0 & (1<<2)));//说明还在传输据
    /* 传完数据后,向UTXH0中写入数据准备下一场传输 */
    UTXH0 = (unsigned char)c;

    return 0;
}

int getchar(){
    /* read URXH0 */
    while(!(UTRSTAT0 & (1<<0)));//说明没有输据
    return URXH0;
}

int puts(const char *s)
{
    while(*s){
	putchar(*s);
	s++;
    }
    return 0;
}


void printHex(unsigned int val)
{
    int i;
    unsigned char arr[8];

    for (i = 0; i < 8; i++) {
       arr[i] = val & 0xf;
      val >>= 4; 
    }

    puts("0x");
    for (i = 7; i >= 0; i--) {
        if (arr[i] >= 0&& arr[i] <= 9) {
            putchar(arr[i] + '0');
        } else if(arr[i] >= 0xA && arr[i] <= 0xF) {
            putchar(arr[i] - 0xA + 'A');
        }
    }

}

void print1(void)
{
    puts("abc\n\r");
}

void print2(void)
{
    puts("123\n\r");
}

